#include "widget.h"
#include "ui_widget.h"
#include "mainwindow.h"
#include "easyinput.h" // 确保正确包含输入法头文件
#include <QMouseEvent>
#include <QLineEdit>
#include <QApplication> // 添加应用程序头文件

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    , eInput(nullptr) // 初始化输入法指针
    , registeredAccount("")
    , registeredPassword("")
    , inputFlag(false)
{
    ui->setupUi(this);

    // 设置按钮样式
    ui->pushButton_root->setStyleSheet("border-image: url(./btn1.jpg);");
    ui->pushButton_log->setStyleSheet("border-image: url(./btn1.jpg);");
    ui->pushButton_reg->setStyleSheet("border-image: url(./btn1.jpg);"); ;");

    // 设置背景
    QPalette pal = this->palette();
    pal.setBrush(QPalette::Background, QBrush(QPixmap("./bg.jpg")));
    setPalette(pal);

    // 设置密码输入框的回显模式
    ui->lineEdit_passwd->setEchoMode(QLineEdit::Password);

    // 初始化软键盘
    initSoftKeyboard();

    // 设置焦点变化信号连接
    setupFocusSignals();
}

Widget::~Widget()
{
    delete ui;
}

// 初始化软键盘
void Widget::initSoftKeyboard()
{
    // 创建输入法实例
    eInput = new easyInput(this);
    eInput->setWindowFlags(Qt::Tool | Qt::WindowDoesNotAcceptFocus); // 关键：设置输入法窗口属性
    eInput->setGeometry(0, height() - 300, width(), 300); // 设置初始位置在窗口底部
    eInput->hide(); // 初始时隐藏输入法
    inputFlag = true;

    // 为输入法安装事件过滤器
    eInput->installEventFilter(this);
}

// 设置焦点信号连接
void Widget::setupFocusSignals()
{
    // 连接账号输入框焦点变化信号
    connect(ui->lineEdit_account, &QLineEdit::selectionChanged, [this]() {
        if (ui->lineEdit_account->hasFocus()) {
            show();
        }
    });

    // 连接密码输入框焦点变化信号
    connect(ui->lineEdit_passwd, &QLineEdit::selectionChanged, [this]() {
        if (ui->lineEdit_passwd->hasFocus()) {
            show();
        }
    });
}

void Widget::showSoftKeyboard()
{
    if (eInput && !eInput->isVisible()) {
        eInput->show();
        // 定位输入法到窗口底部
        eInput->setGeometry(0, height() - 300, width(), 300);
    }
}

void Widget::hideSoftKeyboard()
{
    if (eInput && eInput->isVisible()) {
        eInput->hide();
    }
}

// 实现事件过滤器
bool Widget::eventFilter(QObject *obj, QEvent *event)
{
    // 处理鼠标点击事件
    if (event->type() == QEvent::MouseButtonPress) {
        // 如果点击的是输入法控件，不需要处理
        if (obj == eInput) {
            return QWidget::eventFilter(obj, event);
        }

        // 如果点击的不是输入框，则隐藏输入法
        if (obj != ui->lineEdit_account && obj != ui->lineEdit_passwd) {
            hide();
        }
    }

    // 处理焦点事件（备用方案）
    if (event->type() == QEvent::FocusIn && (obj == ui->lineEdit_account || obj == ui->lineEdit_passwd)) {
        show();
    }

    return QWidget::eventFilter(obj, event);
}

// 实现隐藏输入法槽函数
void Widget::slotHideInput()
{
    hide();
}

// 管理员入口按钮 - 使用图片中的对象名
void Widget::on_pushButton_root_clicked()
{
    // 创建MainWindow实例 - 对象名来自图片
    MainWindow *mainWin = new MainWindow(this);

    // 设置自动释放属性
    mainWin->setAttribute(Qt::WA_DeleteOnClose);

    // 显示主窗口
    mainWin->show();

    // 隐藏当前登录窗口
    this->hide();
}

// 登录按钮 - 使用图片中的对象名
void Widget::on_pushButton_log_clicked()
{
    // 获取输入框文本 - 严格使用图片中的对象名
    QString account = ui->lineEdit_account->text().trimmed();
    QString password = ui->lineEdit_passwd->text().trimmed();

    // 验证输入是否为空
    if(account.isEmpty() || password.isEmpty()) {
        QMessageBox::warning(this, "登录失败", "账号或密码不能为空！");
        return;
    }

    // 检查是否已注册
    if(registeredAccount.isEmpty()) {
        QMessageBox::warning(this, "登录失败", "请先注册账号！");
        return;
    }

    // 验证账号密码
    if(account != registeredAccount) {
        QMessageBox::warning(this, "登录失败", "账号不存在！");
        return;
    }

    if(password != registeredPassword) {
        QMessageBox::warning(this, "登录失败", "密码错误！");
        return;
    }

    // 登录成功
    QMessageBox::information(this, "登录成功", "登录成功，正在进入系统...");

    // 调用管理员入口进入主界面
    on_pushButton_root_clicked();
}

// 注册按钮 - 使用图片中的对象名
void Widget::on_pushButton_reg_clicked()
{
    // 获取输入框文本 - 严格使用图片中的对象名
    QString account = ui->lineEdit_account->text().trimmed();
    QString password = ui->lineEdit_passwd->text().trimmed();

    // 验证输入是否为空
    if(account.isEmpty() || password.isEmpty()) {
        QMessageBox::warning(this, "注册失败", "账号或密码不能为空！");
        return;
    }

    // 保存账号密码
    registeredAccount = account;
    registeredPassword = password;

    // 清空输入框
    ui->lineEdit_account->clear();
    ui->lineEdit_passwd->clear();

    // 提示注册成功
    QMessageBox::information(this, "注册成功", "账号注册成功！");
}
